package com.yida.gwj.expend.outside.service;

import com.yida.gwj.expend.outside.domain.GwjMaintenanceFundsBusinessBuild;
import com.yida.gwj.expend.outside.domain.GwjMaintenanceFundsBusinessHouse;
import com.yida.gwj.expend.outside.domain.dto.*;
import com.yida.gwj.expend.outside.domain.request.AllocatedAmountRequest;
import com.yida.gwj.expend.outside.domain.request.GwjMaintenanceFundsBusinessAddRequest;
import com.yida.gwj.expend.outside.domain.request.GwjMaintenanceFundsBusinessListRequest;
import com.yida.gwj.expend.outside.domain.request.ShareEquallyMoneyRequest;

import java.util.List;


/**
 * 公维金维修资金应急申请业务接口
 *
 * @author liangp
 * @date 2023/04/24
 */
public interface IGwjMaintenanceFundsBusinessUrgentService {

    /**
     * 查询公维金维修资金业务列表
     *
     * @param maintenanceFundsBusinessListRequest 公维金维修资金业务
     * @return 公维金维修资金业务集合
     */
    List<GwjMaintenanceFundsBusinessListDTO> getGwjMaintenanceFundsBusinessList(GwjMaintenanceFundsBusinessListRequest maintenanceFundsBusinessListRequest);

    /**
     * 新增应急申请业务
     *
     * @param gwjMaintenanceFundsBusinessAddRequest gwj维修基金业务请求
     * @return int
     */
    AddUseApplyFormDTO addMaintenanceFundsBusinessForm(GwjMaintenanceFundsBusinessAddRequest gwjMaintenanceFundsBusinessAddRequest);

    /**
     * 保存维护基金业务表单
     * 更改公维金使用资金申请业务
     *
     * @param gwjMaintenanceFundsBusinessAddRequest gwj维修基金业务请求
     * @return int
     */
    int editMaintenanceFundsBusinessForm(GwjMaintenanceFundsBusinessAddRequest gwjMaintenanceFundsBusinessAddRequest);

    /**
     * 获取gwj维修基金业务详细信息
     *
     * @param bizId 业务标识
     * @return {@link GetBusinessDetailDTO}
     */
    GetBusinessDetailDTO getDetailMessage(Long bizId);

    /**
     * 分摊金额-已选择
     *
     * @param allocatedAmountRequest
     * @return AllocatedAmountSelectDTO
     */
    AllocatedAmountSelectDTO allocatedAmountList(AllocatedAmountRequest allocatedAmountRequest);

    /**
     * 使用申请-资金分摊-未选中列表
     *
     * @param allocatedAmountRequest 列表请求
     * @return 公维金维修资金业务
     */
    List<GwjMaintenanceFundsBusinessHouse> allocatedAmountCancelList(AllocatedAmountRequest allocatedAmountRequest);

    /**
     * 分摊金额-选中房屋操作
     *
     * @param allocatedAmountRequest
     * @return AllocatedAmountSelectDTO
     */
    int allocatedAmountArrange(AllocatedAmountRequest allocatedAmountRequest);

    /**
     * 分摊金额-取消选中房屋操作
     *
     * @param allocatedAmountRequest
     * @return AllocatedAmountSelectDTO
     */
    int allocatedAmountCancel(AllocatedAmountRequest allocatedAmountRequest);

    /**
     * 按类型平摊金额
     *
     * @param shareEquallyMoneyRequest
     * @return AllocatedAmountSelectDTO
     */
    int shareEquallyMoney(ShareEquallyMoneyRequest shareEquallyMoneyRequest);

    /**
     * 获取已选中楼栋信息
     *
     * @param bizId 商业标识
     * @return 获取已选中楼栋信息
     */
    List<GwjMaintenanceFundsBusinessBuild> getSelectBuilds(Long bizId);

    /**
     * 查看申请报告
     *
     * @param bizId
     * @return AllocatedAmountSelectDTO
     */
    ApplicationReportDTO getApplicationReport(Long bizId);

    /**
     * 获取改造方案
     *
     * @param bizId 业务标识
     * @return {@link ChangeSchemeDTO}
     */
    ChangeSchemeDTO getTransformationPlan(Long bizId);

    /**
     * 查询决算费用分摊清册
     *
     * @param bizId 业务标识
     * @return int
     */
    TotalCostShareListDTO costList(Long bizId);

    /**
     * 应急申请业务回填信息查询
     *
     * @param communityId 社区id
     * @return 应急申请业务回填信息
     */
    ApplyBaseInfoDTO getCommunity(Long communityId);

    /**
     * 提交数据到内网
     *
     * @param bizId 业务标识
     * @return int
     */
    int preAcceptSubmit(Long bizId);

    /**
     * 导出房屋数据
     *
     * @param allocatedAmountRequest
     * @return 楼栋下房屋信息
     */
    List<AllocatedAmountListDTO> exportHouseList(AllocatedAmountRequest allocatedAmountRequest);

    /**
     * 修改平摊金额
     *
     * @param shareEquallyMoneyRequest
     * @return AllocatedAmountSelectDTO
     */
    int shareEquallyMoneyUpdate(ShareEquallyMoneyRequest shareEquallyMoneyRequest);

    /**
     * 获取步骤按钮权限信息
     *
     * @return 查询业务基础信息
     */
    StepConfigInfoDTO getStepConfigInfo();

}
